【Spring】对象的生命周期(创建、初始化、销毁) |
您所在的位置:网站首页 › spring ioc创建和销毁 › 【Spring】对象的生命周期(创建、初始化、销毁) |
文章目录
一、生命周期二、创建阶段三、初始化阶段3.1 InitializingBean接口3.2 配置init-method3.3 分析
四、销毁阶段4.1 DisposableBean 接口:4.2 配置 destroy-method
五、总结
一、生命周期
什么是对象的生命周期? ⼀个对象创建、存活、消亡的⼀个完整过程。为什么要学习对象的生命周期? 由 Spring 负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好 Spring 为我们创建的对象。生命周期的 3 个阶段: 创建阶段 —> 初始化阶段 —> 销毁阶段 二、创建阶段Spring 工厂何时创建对象? 当scope="singleton":表示只创建一个对象(单例),Spring 工厂(IoC 容器)创建的同时,创建对象。 当scope="prototype":Spring 工厂在获取对象 ctx.getBean("xxx") 的同时,创建对象。 通过配置 也可以实现工厂获取对象的同时,创建对象。 三、初始化阶段Spring 工厂在创建完对象后,调用对象的初始化方法,完成对应的初始化操作。 初始化方法提供:程序员根据需求,提供初始化方法,最终完成初始化操作。 初始化方法调用:Spring 工厂进行调用。 提供初始化方法的两种方式: 3.1 InitializingBean接口实现InitializingBean接口,重写afterPropertiesSet()方法: public class Product implements InitializingBean { //程序员根据需求实现的方法, 完成初始化操作 @Override public void afterPropertiesSet() throws Exception { System.out.println("Product.afterPropertiesSet"); } } 3.2 配置init-method对象中提供一个普通的初始化方法,配置文件种配置 init-method: public class Product { public void myInit() { System.out.println("Product.myInit"); } } 3.3 分析如果⼀个对象实现 InitializingBean接口又提供的普通的初始化方法,执行顺序? 先执行 InitializingBean,再执行普通初始化方法。 注入⼀定发生在初始化操作的前面。 初始化操作到底是什么? 资源的初始化:数据库、IO、网络、… 四、销毁阶段Spring 销毁对象前,会调用对象的销毁方法,完成销毁操作。 Spring 什么时候销毁所创建的对象?ctx.close(); 销毁方法提供:程序员根据业务需求,定义销毁方法,完成销毁操作 销毁方法调用:Spring 工厂进行调用。 销毁方法的操作只适用于 scope="singleton",初始化操作都适用。 销毁操作到底是什么? 资源的释放:io.close()、connection.close()、… 开发流程与初始化操作一样,提供销毁方法的两种方式: 4.1 DisposableBean 接口:实现DisposableBean接口,重写destroy()方法: public class Product implements DisposableBean { // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作 @Override public void destroy() throws Exception { System.out.println("Product.destroy"); } } 4.2 配置 destroy-method对象中提供一个普通的销毁方法,配置文件种配置destroy-method: public class Product { // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作 public void myDestory() { System.out.println("Product.myDestory"); } } 五、总结 public class Product implements InitializingBean, DisposableBean { private String name; public String getName() { return name; } public void setName(String name) { System.out.println("Product.setName"); this.name = name; } Product() { // 创建 System.out.println("Product.Product"); } // 程序员根据需求实现的方法, 完成初始化操作 public void myInit() { System.out.println("Product.myInit"); } // 程序员根据需求实现的方法, 完成初始化操作 @Override public void afterPropertiesSet() throws Exception { System.out.println("Product.afterPropertiesSet"); } public void myDestory() { System.out.println("Product.myDestory"); } // 程序员根据自己的需求, 定义销毁方法, 完成销毁操作 @Override public void destroy() throws Exception { System.out.println("Product.destroy"); } }在Spring工厂创建完毕后 Spring通过构造方法创建对象,注意,如果是单例对象(scope=singleton),那么该对象在工程创建的同时也完成了创建;如果非单例对象(scope=prototype),会通过ctx.getBean("xx")方法创建对象。初始化阶段:会执行实现了InitializingBean接口并重写的afterPropertiesSet方法。初始化阶段:根据配置文件中init-method的设置,执行自定义的初始化方法。销毁阶段:会执行实现了DIsposableBean接口并重写的destory方法。销毁阶段:根据配置文件中destroy-method的设置,执行自定义的销毁方法。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |